package br.com.ads.sgse.managedBean;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import javax.persistence.EntityManager;
import javax.persistence.Query;

import br.com.ads.dao.DAO;
import br.com.ads.dao.JPAUtil;
import br.com.ads.sgse.entity.Municipio;
import br.com.ads.sgse.entity.UnidadeFederacao;

@ManagedBean(name="municipioBean")
@ViewScoped
public class MunicipioBean implements Serializable {

	private static final long serialVersionUID = 1L;
	
	private Municipio municipio = new Municipio();
	private List<Municipio> municipios;
	private DAO<Municipio> dao = new DAO<Municipio>(Municipio.class);
	private String parameter;
	private UnidadeFederacao unidadefederacao = new UnidadeFederacao();
	private EntityManager em = new JPAUtil().getEntityManager();
	public String getParameter() {return parameter;}
	public void setParameter(String parameter) {this.parameter = parameter;}

	/** ACTIONS **/

	@SuppressWarnings("unused")
	@PostConstruct
	private void init() {
		//getAllMunicipios();
	}

	public String salvar() {
		try {
			if (municipio.getId() == null) {
				dao.adiciona(municipio);
			} else {
				dao.atualiza(municipio);
			}

			getAllMunicipios();
			municipio = new Municipio();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public void remove() {
		try {
			dao.remove(municipio);
			getAllMunicipios();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void getAllMunicipios() {
		try {
			setMunicipios(dao.listaTodos());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	@SuppressWarnings("unchecked")
	public void recuperarMunicipiosPorEstado(ActionEvent e) {
		Query q = em
				.createQuery("select m from Municipio m where m.unidadeFederacao=:uf");
		q.setParameter("uf", unidadefederacao);
		municipios = q.getResultList();
	}

	public Municipio getMunicipio() {return municipio;}
	public void setMunicipio(Municipio municipio) {this.municipio = municipio;}
	
	public List<Municipio> getMunicipios() {return municipios;}
	public void setMunicipios(List<Municipio> municipios) {this.municipios = municipios;}
	public UnidadeFederacao getUnidadefederacao() {
		return unidadefederacao;
	}
	public void setUnidadefederacao(UnidadeFederacao unidadefederacao) {
		this.unidadefederacao = unidadefederacao;
	}
	
}
